/**

Copyright (C) SYSTAP, LLC DBA Blazegraph 2006-2016.  All rights reserved.

Contact:
     SYSTAP, LLC DBA Blazegraph
     2501 Calvert ST NW #106
     Washington, DC 20008
     licenses@blazegraph.com

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; version 2 of the License.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
*/
/*
 * Created on Feb 4, 2007
 */

package com.bigdata.bfs;

import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;

/**
 * Aggregates test suites in increase dependency order.
 * 
 * @author <a href="mailto:thompsonbry@users.sourceforge.net">Bryan Thompson</a>
 * @version $Id$
 */
public class TestAll extends TestCase {

    /**
     * 
     */
    public TestAll() {
    }

    /**
     * @param arg0
     */
    public TestAll(String arg0) {
        super(arg0);
    }

    /**
     * Aggregates the tests in increasing dependency order.
     */
    public static Test suite()
    {

        TestSuite suite = new TestSuite("Bigdata File System");
 
        /*
         * Low-level block IO operations for file versions.
         * 
         * FIXME test overflow handling of the data index, especially with an
         * eye to the index split points and the optimization to store blocks
         * using raw records on the journal (thereby requiring an extension of
         * the overflow semantics to get the data inline on the
         * {@link IndexSegment}).
         */
        
        // test atomic append operations on the file and read back.
        suite.addTestSuite( TestAppendBlock.class );

        // test copying streams to a file using atomic append.
        suite.addTestSuite( TestCopyStream.class );
        
        // test some specifics of the FileVersionOutputStream.
        suite.addTestSuite( TestFileVersionOutputStream.class );
        
        // test random block read / write / update / delete operations.
        suite.addTestSuite( TestRandomBlockOps.class );
        
        /*
         * These two tests should be part of the map/reduce master test suite.
         * 
         * @todo test split of a large file into blocks (the file is conditioned
         * by the application for this by flushing the stream before the next
         * 64k block) and the read of each block by its appropriate client.
         * 
         * @todo also test ability to figure out which client is "near" the
         * blocks by consulting the {@link MetadataIndex} and an as yet
         * undefined network topology model.
         */
        
        /*
         * High-level operations on "file"s.
         * 
         * @todo test various operations on the file metadata index, including
         * those that write on the data index.
         * 
         * @todo add test suite covering (a) CRUD operations; (c) range scan and
         * range delete operations; (d) performance tests under simulated load;
         * 
         * @todo test overflow of the file metadata index.
         * 
         * @todo test policy for compacting merge to eventually eradicate old
         * file versions and their metadata.
         * 
         * @todo test policy for replication counts - the file identifiers space
         * is partitioned by an application specified policy into a variety of
         * zones with their own replication and compacting merge policies.
         * typical zones would correspond to /tmp, /highly-available, etc. The
         * media indexing policy could also be per-zone. A "zone" corresponds to
         * a set of index partitions.
         */
        suite.addTestSuite( TestFileMetadataIndex.class );
        
        // test document metadata range scan.
        suite.addTestSuite( TestRangeScan.class );
        
        // test range delete of file versions.
        suite.addTestSuite( TestRangeDelete.class );
        
        /* 
         * @todo test full text indexing and search.
         */
//        suite.addTestSuite( TestSearch.class );
        
        return suite;
        
    }

}
